// 字节转换类
function byteHelper(value) {
    if (value === 0) {
        return '0 b';
    }
    const units = ['b', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
    const number = Math.floor(Math.log(value) / Math.log(1024));
    return (value / Math.pow(1024, Math.floor(number))).toFixed(2) + ' ' + units[number];
}
/**
 * 类相加
 * @param {Array} values - 类的数组
 * @returns {String} 类的总和
 */
function sizeAdd(values) {
    if (values.length === 0) return '0 b';

    const units = ['b', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
    const unitRegex = /[a-zA-Z]+$/;

    let valuesAdd = values.reduce((acc, val) => {
        const unitMatch = val.toString().match(unitRegex);

        // 如果没有匹配到单位，默认单位为字节 'b'
        const unit = unitMatch ? unitMatch[0].toLowerCase() : 'b';

        // 将单位列表中的单位也全部转换为小写进行比较
        const matchedUnit = units.find(u => u.toLowerCase() === unit);

        if (!matchedUnit) {
            return acc; // 如果单位不匹配，则跳过此值
        }

        const number = parseFloat(val.toString().replace(unitMatch ? unitMatch[0] : '', ''));

        if (isNaN(number)) {
            return acc; // 如果无法解析数字，则跳过此值
        }

        const multiplier = Math.pow(1024, units.indexOf(matchedUnit));

        return acc + number * multiplier;
    }, 0);

    return byteHelper(valuesAdd);
}
/**
 * 类转换字节
 */
function classHelperByte(value) {
    if (!value) return '0 b';
    const units = ['b', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
    // 使用正则匹配末尾的字母部分作为单位，不区分大小写
    const unitRegex = /[a-zA-Z]+$/;
    const unitMatch = value.toString().match(unitRegex);

    if (!unitMatch) {
        return `${value} b`
    }

    // 将提取到的单位转换为小写
    const unit = unitMatch[0].toLowerCase();
    // 查找与输入单位匹配的标准单位（忽略大小写）
    const matchedUnit = units.find(u => u.toLowerCase() === unit);

    if (!matchedUnit) {
        return
    }

    // 获取数值部分
    const number = parseFloat(value.toString().replace(unitMatch[0], ''));
    // 根据单位获取对应的字节值
    const multiplier = Math.pow(1024, units.indexOf(matchedUnit));

    return number * multiplier;
}
module.exports = {
    byteHelper,
    sizeAdd,
    classHelperByte
}